package com.ruoyi.store.service.impl;

import java.util.List;

import com.ruoyi.inventory.domain.Inventory;
import com.ruoyi.inventory.service.impl.InventoryServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.store.mapper.StoreMapper;
import com.ruoyi.store.domain.Store;
import com.ruoyi.store.service.IStoreService;
import org.springframework.transaction.annotation.Transactional;

/**
 * 入库Service业务层处理
 *
 * @author wyj
 * @date 2025-02-26
 */
@Service
public class StoreServiceImpl implements IStoreService
{
    @Autowired
    private StoreMapper storeMapper;

    @Autowired
    private InventoryServiceImpl inventoryService;

    /**
     * 查询入库
     *
     * @param storeId 入库主键
     * @return 入库
     */
    @Override
    public Store selectStoreByStoreId(Long storeId)
    {
        return storeMapper.selectStoreByStoreId(storeId);
    }

    /**
     * 查询入库列表
     *
     * @param store 入库
     * @return 入库
     */
    @Override
    public List<Store> selectStoreList(Store store)
    {
        return storeMapper.selectStoreList(store);
    }

    /**
     * 新增入库（事务版）
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public int insertStore(Store store) {
        // 1. 依赖注入Service（类成员变量添加）
        // @Autowired
        // private IInventoryService inventoryService;
        // 2. 当库存ID不存在时创建新库存
        Inventory inventory = new Inventory();
        if (store.getInventoryId() == null || store.getInventoryId() == 0) {
            // 插入库存并获取ID（需确保insertInventory方法返回对象）
            inventory.setStockQuantity(store.getStockQuantity());
            inventory.setLocation(store.getLocation());
            inventory.setBatchNumber(store.getBatchNumber());
            inventory.setProductionDate(store.getProductionDate());
            inventory.setExpiryDate(store.getExpiryDate());
            inventory.setSupplier(store.getSupplier());
            inventory.setDrugId(store.getDrugId());
            inventoryService.insertInventory(inventory);
        }else {
            //如果有,则增加主库存数量
            Inventory nowInventory = inventoryService.selectInventoryByInventoryId(store.getInventoryId());
            long num=nowInventory.getStockQuantity()+store.getStockQuantity();
            //合并库存
            inventory.setStockQuantity(num);
            inventory.setInventoryId(store.getInventoryId());
            inventoryService.updateInventory(inventory);
        }
        // 3. 执行入库单生成
        return storeMapper.insertStore(store);
    }

    /**
     * 修改入库
     *
     * @param store 入库
     * @return 结果
     */
    @Override
    public int updateStore(Store store)
    {
        return storeMapper.updateStore(store);
    }

    /**
     * 批量删除入库
     *
     * @param storeIds 需要删除的入库主键
     * @return 结果
     */
    @Override
    public int deleteStoreByStoreIds(Long[] storeIds)
    {
        return storeMapper.deleteStoreByStoreIds(storeIds);
    }

    /**
     * 删除入库信息
     *
     * @param storeId 入库主键
     * @return 结果
     */
    @Override
    public int deleteStoreByStoreId(Long storeId)
    {
        return storeMapper.deleteStoreByStoreId(storeId);
    }
}
